#include <stdio.h>
#include <stdlib.h>

//una funcion que tarda un rato en ejecutarse
void haceralgo(char* quien){ printf("%s entered",quien); fflush(NULL); sleep(rand()%3); printf(" -> %s exiting\n",quien); }

int main(int argc, char *argv[]){
	int pipefd[2];
	pid_t cpid;
	char w='L';
	char r;
	
	//Creo el pipe
	if(pipe(pipefd)==-1) exit(EXIT_FAILURE);
	
	//Inicializo el pipe
	while(write(pipefd[1], &w, 1) != 1);
	
	//Duplico el proceso
	if((cpid = fork())==-1) exit(EXIT_FAILURE);

	if(cpid==0){
		// Child
		while(1){
			while(read(pipefd[0], &r, 1) != 1); //espero el lock
			haceralgo("Child");
			while(write(pipefd[1], &w, 1) != 1); //libero el lock
			sleep(rand()%3);
		}
	}else{
		//Parent
		while(1){
			while(read(pipefd[0], &r, 1) != 1); //espero el lock
			haceralgo("Parent");
			while(write(pipefd[1], &w, 1) != 1); //libero el lock
			sleep(rand()%3);
		}
	}
	wait(NULL); //Espero a los procesos para terminar
	return 0;
}
